// server
module EntityCondivise
{
	class ETask;
	class ETimeRecord;
	class EDipendente;
	class EDipendenza;
	class EMoney;	
		
	["java:type:java.util.ArrayList<EntityCondivise.EDipendenza>:java.util.List<EntityCondivise.EDipendenza>"] sequence<::EntityCondivise::EDipendenza> dipendenzeLista;
	["java:type:java.util.ArrayList<EntityCondivise.ETimeRecord>:java.util.List<EntityCondivise.ETimeRecord>"] sequence<::EntityCondivise::ETimeRecord> timerecordsLista;		
	["java:type:java.util.ArrayList<EntityCondivise.ETask>:java.util.List<EntityCondivise.ETask>"] sequence<::EntityCondivise::ETask> taskLista;		

class EDipendente
	{
		int matricola;
		
		string username;
		string password;
				
		string nome;
		string cognome;
		
		string discriminator;
		
		//string getPassword();
	};

	class EConsulente extends EDipendente
	{

	};
	
	class EManager extends EDipendente
	{

	};
	
	class EProprietario extends EDipendente
	{

	};	

	class EMoney
	{
		int id;
		int prezzo;
		string valuta;
	};

	class ETask
	{
		int id;
		
		string inizio;
		string fine;
		
		string titolo;
		
		::EntityCondivise::EMoney costoOrario;
		::EntityCondivise::EDipendente consulenteAttuale;		
		dipendenzeLista dipendenze;
		timerecordsLista timerecords;
		
		::EntityCondivise::ETimeRecord addTR();
		void stopTR(string commento);
		
	};	

	class ETimeRecord
	{
		int id;
		string inizio;
		string fine;
		string testo;
		::EntityCondivise::EMoney costoOrario;		
		::EntityCondivise::EDipendente consulente;
		bool corrente;	
	};
	
	class EDipendenza
	{
		int id;
		ETask padre;
		ETask figlio;
	};

};

module InterfacceCondivise
{

	["java:type:java.util.ArrayList<EntityCondivise.ETimeRecord>:java.util.ArrayList<EntityCondivise.ETimeRecord>"] sequence<::EntityCondivise::ETimeRecord> timerecordsLista;		
	["java:type:java.util.ArrayList<EntityCondivise.ETask>:java.util.ArrayList<EntityCondivise.ETask>"] sequence<::EntityCondivise::ETask> taskLista;		

	class FdbClientFacade;

	class FdbClientFacade
	{
		void prova();
		EntityCondivise::ETask getTask(int idTask);
		
		timerecordsLista getTimeRecordList(EntityCondivise::EDipendente consulente);
		taskLista getTaskList(EntityCondivise::EDipendente consulente);
		EntityCondivise::EDipendente getDipendenteByUsername(string username);
		string getSottoprogetto(EntityCondivise::ETask task);
		string getProgetto(EntityCondivise::ETask task);		
		
		int save(Object obj);
		void update(Object obj);
		Object load(Object classe, int id);
		void delete(Object obj);
		
	};
};

